[アップデート] Lambda 関数のランタイムで Node.js 22 が利用可能になったので AWS CDK で設定してみた
こんにちは、製造ビジネステクノロジー部の若槻です。
最近の AWS Lambda のサービスアップデートで、Node.js 22 ランタイムが利用可能になりました。
公式のアップデート情報はこちらです。
そして AWS CDK の方でも早速 Lambda L2 Construct で Node.js 22 ランタイムの利用がサポートされるリリースがあったので、実際に試してみました。
lambda: add NodeJS 22.x support (#32104) (baa8561)
試してみた
CDK パッケージのアップデート
AWS CDK モジュールを v2.168.0 以上にアップデートします。
npm i aws-cdk-lib@latest aws-cdk@latest
CDK 実装
AWS CDK の Runtime クラスで Node.js 22 ランタイムが追加されており、NodejsFunction または Function で利用可能となっています。
ここでは NodejsFunction を試してみます。Runtime クラスで NODEJS_22_X
を指定します。
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as lambda from 'aws-cdk-lib/aws-lambda';
import * as lambda_nodejs from 'aws-cdk-lib/aws-lambda-nodejs';
export class MainStack extends cdk.Stack {
constructor(scope: Construct, id: string, props: cdk.StackProps) {
super(scope, id, props);
new lambda_nodejs.NodejsFunction(this, 'MyFunction', {
runtime: lambda.Runtime.NODEJS_22_X, // Node.js 22 ランタイムを指定
});
}
}
ちなみに現バージョン時点では Node.js 16 以前は Deprecated となっていました。
ハンドラーに指定した Lambda 関数コードはこちらです。
export const handler = async (): Promise<void> => {
console.log('Hello, world!');
};
上記実装を CDK デプロイし、作成された Lambda 関数をマネジメントコンソールから確認すると、ランタイムが Node.js 22 となっていることが確認できました。
NODEJS_LATEST での指定は Node.js 18 となる
ランタイムを NODEJS_LATEST
で指定した場合はどうなるでしょう。
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as lambda from 'aws-cdk-lib/aws-lambda';
import * as lambda_nodejs from 'aws-cdk-lib/aws-lambda-nodejs';
export class MainStack extends cdk.Stack {
constructor(scope: Construct, id: string, props: cdk.StackProps) {
super(scope, id, props);
new lambda_nodejs.NodejsFunction(this, 'MyFunction', {
runtime: lambda.Runtime.NODEJS_LATEST, // 指定を変更
});
}
}
CDK Diff で差分を確認すると、Node.js 18 となりました。
$ npx cdk diff Main
Bundling asset Main/MyFunction/Code/Stage...
cdk.out/bundling-temp-c51ea79c250def6d78333ab33d9580a7f77f5eeffe7710e89195f6512585c09e/index.js 1.1kb
⚡ Done in 3ms
start: Building 9c75552aaa5df261ad192d15840b3fcad826065c70d5aa2ecd3703b8d55c6f9b:XXXXXXXXXXXX-ap-northeast-1
success: Built 9c75552aaa5df261ad192d15840b3fcad826065c70d5aa2ecd3703b8d55c6f9b:XXXXXXXXXXXX-ap-northeast-1
start: Publishing 9c75552aaa5df261ad192d15840b3fcad826065c70d5aa2ecd3703b8d55c6f9b:XXXXXXXXXXXX-ap-northeast-1
success: Published 9c75552aaa5df261ad192d15840b3fcad826065c70d5aa2ecd3703b8d55c6f9b:XXXXXXXXXXXX-ap-northeast-1
Hold on while we create a read-only change set to get a diff with accurate replacement information (use --no-change-set to use a less accurate but faster template-only diff)
Stack Main
Resources
[~] AWS::Lambda::Function MyFunction MyFunction3BAA72D1
└─ [~] Runtime
├─ [-] nodejs22.x
└─ [+] nodejs18.x
✨ Number of stacks with differences: 1
LATEST
とはありますが現時点では最新の Node.js 22 は指定されないので注意が必要です。
おわりに
Lambda 関数のランタイムで Node.js 22 が利用可能になったので AWS CDK で設定してみました。
Node.js の公式リリーススケジュールを見ると Node.js 20 はもうじきメンテナンスモードになるようです。
ランタイムのアップデートは計画的に行うようにしましょう。
以上